package com.uniview.service;

import com.uniview.entity.po.ServiceOrders;
import com.uniview.entity.po.ServiceOrdersLogs;
import com.uniview.entity.vo.Pager;

import java.util.List;
import java.util.Map;

/**
 * 服务工单接口
 * 
 * @author Qingtian Lei
 * @Date 2018-05-29 02:20
 */
public interface ServiceOrdersService {

	/**
	 * 创建工单
	 * 
	 * @param os
	 * @param sol
	 */
	Integer saveOrders(ServiceOrders os, ServiceOrdersLogs sol);

	/**
	 * 审批工单
	 * 
	 * @param os
	 * @param sol
	 * @return
	 */
	boolean approveOrders(ServiceOrders os, ServiceOrdersLogs sol);

	/**
	 * 处理工单
	 * 
	 * @param os
	 * @param sol
	 */
	boolean handleOrder(ServiceOrders os, ServiceOrdersLogs sol);

	/**
	 * 催单
	 * 
	 * @param os
	 * @param sol
	 */
	boolean urgeOrder(ServiceOrders os, ServiceOrdersLogs sol);

	/**
	 * 获取工单的详情
	 * 
	 * @param orderId
	 * @return
	 */
	ServiceOrders featchOrders(Integer orderId) throws Exception;

	/**
	 * 删除订单信息
	 * 
	 * @param orderId
	 * @return
	 * @throws Exception
	 */
	boolean deleteOrder(int orderId) throws Exception;

	/**
	 * 修改工单信息
	 * 
	 * @param os
	 * @return
	 * @throws Exception
	 */
	boolean updateOrder(ServiceOrders os, ServiceOrdersLogs sol) throws Exception;

	/**
	 * 获取工单列表
	 * 
	 * @param creator
	 *            工单创建者
	 * @param status
	 *            工单状态
	 * @param pageSize
	 *            每页记录数
	 * @param pageNo
	 *            当前页数
	 * @return
	 */
	Pager<ServiceOrders> findOrdersByCreator(String creator, int status, int pageSize, int pageNo);

	/**
	 * 查询工单
	 * 
	 * @param creator
	 *            创建人
	 * @param handler
	 *            处理人
	 * @param startData
	 *            开始时间
	 * @param endData
	 *            结束时间
	 * @param area
	 *            办事处
	 * @param status
	 * @param pageSize
	 * @param pageNo
	 * @return
	 */
	Pager<ServiceOrders> findAllOrders(String creator, String handler, String startDate, String endDate, String area,
			int status, int pageSize, int pageNo);

	/**
	 * 
	 * @param userRole
	 * @param creator
	 * @param handler
	 * @param startDate
	 * @param endDate
	 * @param status
	 * @param pageSize
	 * @param pageNo
	 * @return
	 */
	Pager<ServiceOrders> findAllOrdersByWeb(Integer userRole, String empCode, String creator, String handler,
			String startDate, String endDate, int status, String orderNo, int pageSize, int pageNo);

	Pager<ServiceOrders> findAllOrdersByAdmin(String creator, String handler, String startDate, String endDate,
			int status, String orderNo, int pageSize, int pageNo);

	/**
	 * Web获取工单
	 * 
	 * @param creator
	 * @param handler
	 * @param empName
	 * @param region
	 * @param startDate
	 * @param endDate
	 * @param area
	 * @param status
	 * @param pageSize
	 * @param pageNo
	 * @return
	 */
	Pager<ServiceOrders> findAllOrders(String creator, String handler, String empName, String region, String startDate,
			String endDate, String area, int status, int pageSize, int pageNo);

	/**
	 * 获取工单列表
	 * 
	 * @param handle
	 *            工单处理人
	 * @param status
	 *            工单状态
	 * @param pageSize
	 *            每页记录数
	 * @param pageNo
	 *            当前页数
	 * @return
	 */
	Pager<ServiceOrders> findOrdersByHandle(String handle, int status, int pageSize, int pageNo);

	/**
	 *
	 * 导出工单
	 */
	List<ServiceOrders> exportAllOrders(String creator, String handler, String empName, String region, String startDate,
			String endDate, int status, String searchOrderNo);
	
	/**
	 *
	 * 管理员导出工单
	 */
	List<ServiceOrders> exportAllOrdersByAdmin(String creator, String handler, String startDate, String endDate,
			Integer status,	String searchOrderNo);

	/**
	 * 统计过去days天的工单数
	 * 
	 * @param days
	 * @return
	 */
	Map<String, Object> countOrdersByStatusFromDay(String empCode, String department, int days);
	
	/**
	 * 管理员统计过期days天的工单数
	 * 
	 * @param days
	 * @return
	 */
	Map<String, Object> countOrdersByStatusFromDayByAdmin(int days);

	/**
	 * 根据用户权限查询工单列表
	 * 
	 * @param workNo
	 * @param status
	 * @param pageSize
	 * @param pageNo
	 * @return
	 */
	Pager<ServiceOrders> findOrdersByUserRole(Integer userRole, String workNo, String query, int status, int pageSize,
			int pageNo) throws Exception;

	/**
	 * 按个人统计订单的数量
	 * 
	 * @param empCode
	 * @return
	 */
	public Map<String, String> statisticsOrderCount(String empCode);

	/**
	 * 查找库中最后一个订单编号
	 * 
	 * @return
	 */
	public ServiceOrders findLastOrderNo();

	/**
	 * 根据订单的状态查询订单的数量
	 * 
	 * @return
	 */
	public Integer getTotalByStatus(int status, String date);

	/**
	 * 更新订单的状态
	 * 
	 * @return
	 */
	public boolean updateOrderStatus(int status, String date);
	
	/**
	 * 更新订单的状态为删除状态
	 * 
	 * @return
	 */
	public boolean updateOrderStatusByOrderId(int orderId, ServiceOrdersLogs sol);

	/**
	 * 根据状态查询订单
	 * 
	 * @param status
	 * @return
	 */
	public List<ServiceOrders> findOrdersByStauts(int status, String date);
	
	/**
	 * 根据状态时间查询子订单
	 * 
	 * @param status
	 * @return
	 */
	public List<ServiceOrders> findChildOrdersByStauts(int status, String date);

	/**
	 * 根据父工单id查找对应的子工单
	 * 
	 * @param parentId
	 * @return
	 */
	public List<ServiceOrders> findOrdersByParentId(int parentId);

	/**
	 * 非管理员工单详情导出Excel
	 * userRole：2是查询服务经理的工单，1是查询普通员工的工单
	 * @param userRole
	 * @param empCode
	 * @param creator
	 * @param handler
	 * @param startDate
	 * @param endDate
	 * @param status
	 * @param searchOrderNo
	 * @return
	 */
	List<ServiceOrders> exportAllOrdersByWeb(Integer userRole, String empCode,
			String creator, String handler, String startDate, String endDate,
			int status, String searchOrderNo);

	/**
	 * 根据工单编号查找工单
	 * @param orderNo
	 * @return
	 */
	ServiceOrders findOrderByOrderNo(String orderNo);
	
}
